package com.yc.web.controller;

import com.yc.services.UserDailyAnalysisService;
import com.yc.web.controller.model.ResponseResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@RestController
@RequestMapping("/api/daily-analysis")
public class DailyAnalysisController {
    
    private static final Logger logger = LoggerFactory.getLogger(DailyAnalysisController.class);
    
    @Autowired
    private UserDailyAnalysisService dailyAnalysisService;
    
    /**
     * 获取用户的每日心理分析历史
     */
    @GetMapping("/history")
    public ResponseResult getDailyAnalysisHistory(@RequestParam("userId") String userId) {
        try {
            logger.info("获取用户 {} 的每日分析历史", userId);
            
            String historyData = dailyAnalysisService.getUserDailyAnalysisHistory(userId);
            
            if (historyData == null || historyData.isEmpty()) {
                return ResponseResult.ok("暂无分析历史").setData("[]");
            }
            
            return ResponseResult.ok("获取分析历史成功").setData(historyData);
            
        } catch (Exception e) {
            logger.error("获取用户 {} 的每日分析历史失败", userId, e);
            return ResponseResult.error("获取分析历史失败: " + e.getMessage());
        }
    }
    
    /**
     * 手动触发指定用户的心理分析
     */
    @PostMapping("/trigger")
    public ResponseResult triggerAnalysis(
            @RequestParam("userId") String userId,
            @RequestParam(value = "date", required = false) String dateStr) {
        try {
            LocalDate targetDate;
            if (dateStr == null || dateStr.isEmpty()) {
                targetDate = LocalDate.now().minusDays(0); // 默认分析昨天
            } else {
                targetDate = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            }
            
            logger.info("手动触发用户 {} 在 {} 的心理分析", userId, targetDate);
            
            boolean success = dailyAnalysisService.triggerAnalysisForUser(userId, targetDate);
            
            if (success) {
                return ResponseResult.ok("分析任务已完成");
            } else {
                return ResponseResult.error("分析任务失败，可能是该日期没有足够的数据");
            }
            
        } catch (Exception e) {
            logger.error("手动触发用户 {} 的心理分析失败", userId, e);
            return ResponseResult.error("触发分析失败: " + e.getMessage());
        }
    }
    
    /**
     * 获取用户某天的详细分析结果
     */
    @GetMapping("/detail")
    public ResponseResult getDailyAnalysisDetail(
            @RequestParam("userId") String userId,
            @RequestParam("date") String dateStr) {
        try {
            LocalDate targetDate = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            
            // 这里可以实现获取特定日期的详细分析结果
            // 暂时返回历史记录中匹配的数据
            String historyData = dailyAnalysisService.getUserDailyAnalysisHistory(userId);
            
            if (historyData == null || historyData.isEmpty()) {
                return ResponseResult.error("未找到分析数据");
            }
            
            // 可以在这里进一步过滤出指定日期的数据
            return ResponseResult.ok("获取详细分析成功").setData(historyData);
            
        } catch (Exception e) {
            logger.error("获取用户 {} 在 {} 的详细分析失败", userId, dateStr, e);
            return ResponseResult.error("获取详细分析失败: " + e.getMessage());
        }
    }
    
    /**
     * 获取系统分析任务状态信息
     */
    @GetMapping("/status")
    public ResponseResult getAnalysisStatus() {
        try {
            // 这里可以返回定时任务的状态信息
            // 例如最后执行时间、成功数量等
            return ResponseResult.ok("系统运行正常");
            
        } catch (Exception e) {
            logger.error("获取分析任务状态失败", e);
            return ResponseResult.error("获取状态失败: " + e.getMessage());
        }
    }
    
    /**
     * 测试接口：立即执行一次定时任务（仅用于开发测试）
     */
    @PostMapping("/test-run")
    public ResponseResult testRunDailyAnalysis() {
        try {
            logger.info("手动执行定时分析任务测试");
            
            // 在新线程中执行，避免阻塞请求
            new Thread(() -> {
                try {
                    dailyAnalysisService.performDailyAnalysis();
                } catch (Exception e) {
                    logger.error("测试执行定时任务失败", e);
                }
            }).start();
            
            return ResponseResult.ok("定时任务已在后台启动，请查看日志");
            
        } catch (Exception e) {
            logger.error("启动测试定时任务失败", e);
            return ResponseResult.error("启动失败: " + e.getMessage());
        }
    }
} 